 export function   getSurroundingGrids(centerGrid, radius) {
        const [lonStr, latStr] = centerGrid.split('_');
        let centerLon = parseFloat(lonStr);
        let centerLat = parseFloat(latStr);

        const grids = new Set();
        for (let x = -radius; x <= radius; x++) {
            for (let y = -radius; y <= radius; y++) {
                let targetLon = centerLon + x * 0.001;
                let targetLat = centerLat + y * 0.001;

                // 处理经度环绕
                if (targetLon < -180) targetLon += 360;
                else if (targetLon > 180) targetLon -= 360;

                // 处理纬度边界
                targetLat = Math.max(-90, Math.min(90, targetLat));
				const location={longitude:targetLon,latitude:targetLat}

                grids.add(getGridCode(location));
            }
        }
        return Array.from(grids);
    }	
export  function getGridCode (location){

		      const lonPart = (Math.round(location.longitude * 1000) / 1000).toFixed(3);
		      const latPart = (Math.round(location.latitude * 1000) / 1000).toFixed(3);
		      return `${lonPart}_${latPart}`;
		  }
/**
 * 根据中心网格和半径，获取所有周围网格的多边形坐标集合
 * @param {string} centerGrid - 中心网格编码，如 "116.397_39.907"
 * @param {number} radius - 搜索半径（以网格为单位）
 * @returns {Array<Array<Array<number>>>} - 返回多边形坐标集合。结构为:
 *                                         [
 *                                           [[lon1, lat1], [lon2, lat2], [lon3, lat3], [lon4, lat4]], // 第一个网格的多边形
 *                                           [[lon1, lat1], [lon2, lat2], [lon3, lat3], [lon4, lat4]], // 第二个网格的多边形
 *                                           // ...更多网格
 *                                         ]
 */
/**
 * 根据中心网格和半径，计算出所有周围网格所包围的矩形区域的多边形坐标
 * @param {string} centerGrid - 中心网格编码，如 "116.397_39.907"
 * @param {number} radius - 搜索半径（以网格为单位）
 * @returns {Array<Array<number>>} - 返回一个单一的多边形坐标数组。结构为:
 *                                   [[minLon, minLat], [maxLon, minLat], [maxLon, maxLat], [minLon, maxLat], [minLon, minLat]]
 */
export function polygon(location, radius) {
  // 1. 获取所有相关格子的编码
  const gridCenter=getGridCode(location)
  const gridCodes = getSurroundingGrids(gridCenter, radius);

  if (gridCodes.length === 0) {
    console.warn('没有找到任何网格，无法生成包围多边形。');
    return [];
  }

  // 2. 解析所有格子的中心点坐标，并找出边界
  let minLon = Infinity;
  let maxLon = -Infinity;
  let minLat = Infinity;
  let maxLat = -Infinity;

  const halfGridSize = 0.0005; // 因为你的网格大小是 0.001x0.001 度

  for (const code of gridCodes) {
    const [lonStr, latStr] = code.split('_');
    const centerLon = parseFloat(lonStr);
    const centerLat = parseFloat(latStr);

    // 计算每个格子的实际边界
    const gridMinLon = centerLon - halfGridSize;
    const gridMaxLon = centerLon + halfGridSize;
    const gridMinLat = centerLat - halfGridSize;
    const gridMaxLat = centerLat + halfGridSize;

    // 更新整体边界
    if (gridMinLon < minLon) minLon = gridMinLon;
    if (gridMaxLon > maxLon) maxLon = gridMaxLon;
    if (gridMinLat < minLat) minLat = gridMinLat;
    if (gridMaxLat > maxLat) maxLat = gridMaxLat;
  }

  // 3. 根据边界生成一个矩形多边形
  // 顺序：左下 -> 右下 -> 右上 -> 左上 -> 左下（闭合）
  const polygon = [
    {longitude: minLon, latitude:minLat},
    {longitude:maxLon, latitude:minLat},
    {longitude:maxLon, latitude:maxLat},
    {longitude:minLon,latitude: maxLat},
    {longitude:minLon, latitude:minLat} // 闭合多边形
  ];

  return polygon;
} 